home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Applications / Python 1.3.3 / stdwin / Ports / mac / macwin.h < prev    next >
Text File  |  1995-12-21  |  6KB  |  223 lines

  1. /* Common header file for Macintosh STDWIN implementation */
  2.  
  3. #include <Types.h>
  4. #include <Quickdraw.h>
  5. #include <Controls.h>
  6. #include <Events.h>
  7. #include <Windows.h>
  8.  
  9. #ifndef HAVE_UNIVERSAL_HEADERS
  10. #if defined(USESROUTINEDESCRIPTORS) || defined(GENERATINGCFM)
  11. #define HAVE_UNIVERSAL_HEADERS 1
  12. #endif
  13. #endif
  14.  
  15. #include "stdwconf.h"    /* Sets compiler dependent feature test macros */
  16.  
  17.  
  18. #ifdef MPW
  19.  
  20. #include <Strings.h>
  21.  
  22. /* Quickdraw globals aren't really global in MPW */
  23. #define QD(var) (qd.var)
  24.  
  25. /* MPW allows 'static' in forward declarations */
  26. #define STATIC static
  27.  
  28. /* MPW passes Points by address */
  29. #define PASSPOINT &
  30.  
  31. /* MPW glue converts most strings on the fly.
  32.    (XXX I believe you can turn this off now?) */
  33. #define CLEVERGLUE
  34.  
  35. #endif /* MPW */
  36.  
  37.  
  38. #ifdef THINK_C
  39.  
  40. /* Pascal-to-C and back string conversion routines have different names */
  41. #include <pascal.h>
  42.  
  43. /* In Think, QD globals aren't really global any more either... */
  44. #define QD(var) (qd.var)
  45.  
  46. /* THINK C allows 'static' in forward declarations */
  47. #define STATIC static
  48.  
  49. /* THINK C passes Points by value */
  50. #define PASSPOINT /**/
  51.  
  52. /* THINK C supports console I/O through <console.h> */
  53. #define CONSOLE_IO
  54.  
  55. #endif /* THINK_C */
  56.  
  57.  
  58. #ifdef __MWERKS__
  59.  
  60. #include <Strings.h>
  61.  
  62. /* Quickdraw globals aren't really global in Mwerks */
  63. #define QD(var) (qd.var)
  64.  
  65. /* MW allows 'static' in forward declarations */
  66. #define STATIC static
  67.  
  68. /* MW passes Points by value */
  69. #define PASSPOINT /**/
  70.  
  71. /* No CLEVERGLUE, No CONSOLE_IO */
  72. #undef CLEVERGLUE
  73. #undef CONSOLE_IO
  74.  
  75. #undef CtoPstr
  76. #undef PtoCstr
  77. #define CtoPstr C2PStr
  78. #define PtoCstr P2CStr
  79.  
  80. #endif /* __MWERKS__ */
  81.  
  82.  
  83. /* Private include files: */
  84.  
  85. #include "tools.h"
  86. #include "stdwin.h"
  87. #include "menu.h"
  88.  
  89. /* Resolve conflict between <TextEdit.h> and "stdwin.h" */
  90. #undef teclick
  91.  
  92.  
  93. #ifdef CLEVERGLUE
  94. /* MPW converts C to Pascal strings in the glue */
  95. #define PSTRING(str) (str)
  96. #else
  97. /* THINK C needs a real function to do this (see "pstring.c").
  98.    This is different from CtoPstr since it does not do it inline */
  99. extern unsigned char *PSTRING _ARGS((char *));
  100. #endif
  101.  
  102.  
  103. /* Window struct. */
  104.  
  105. struct _window {
  106.     short tag;        /* Window tag, usable as document id */
  107.     void (*drawproc)();    /* Draw procedure */
  108.     WindowPtr w;        /* Mac Window */
  109.     int hcaret, vcaret;    /* Caret position, document coordinates */
  110.     bool caret_on;        /* Set if caret currently visible */
  111.     TEXTATTR attr;        /* Text attributes */
  112.     ControlHandle hbar, vbar;    /* Scroll bars */
  113.     int docwidth, docheight;    /* Document size */
  114.     int orgh, orgv;        /* Window origin, document coordinates */
  115.     struct menubar mbar;    /* List of attached local menus */
  116.     unsigned long timer;    /* Tick count for timer event */
  117.     CURSOR *cursor;        /* Cursor if not default */
  118.     COLOR fgcolor, bgcolor;    /* Default colors for this window */
  119. };
  120.  
  121. extern TEXTATTR wattr;        /* Current text attributes */
  122.  
  123. #define TX_INVERSE    0x80    /* Or-ed into style bits */
  124.  
  125. /* Peculiarities of the Macintosh: */
  126.  
  127. #define TICKSPERSECOND    60    /* Clock ticks at 60 Hz (everywhere) */
  128.  
  129. #define MENUBARHEIGHT    20    /* Height of menu bar */
  130. #define TITLEBARHEIGHT    18    /* Height of window title bar */
  131. #define BAR        15    /* Scroll bar width, minus one pixel */
  132.  
  133. /* ASCII codes generated by special keys: */
  134. #define ENTER_KEY    0x03
  135.  
  136. #define LEFT_ARROW    0x1c
  137. #define RIGHT_ARROW    0x1d
  138. #define UP_ARROW    0x1e
  139. #define DOWN_ARROW    0x1f
  140.  
  141.  
  142. /* Miscellaneous definitions. */
  143.  
  144. #define CLICK_DIST    5    /* Max mouse move within a click */
  145.  
  146. /* Text drawn in the very left or right margin doesn't look nice.
  147.    Therefore, we have a little margin on each side.
  148.    Its width is determined here: */
  149. #define LSLOP    4    /* Pixels in left margin */
  150. #define RSLOP    4    /* Pixels in right margin */
  151.  
  152. /* Global data: */
  153. extern GrafPtr screen;        /* Window Manager's GrafPort */
  154. extern WINDOW *active;        /* Active window, if any */
  155. extern bool _wmenuhilite;    /* Set if menu item highlighted */
  156. extern bool _wm_down;        /* Set if mouse down (in appl. area) */
  157. extern COLOR _w_fgcolor;    /* Current foreground color */
  158. extern COLOR _w_bgcolor;    /* Current background color */
  159.  
  160. /* Function prototypes: */
  161.  
  162. void dprintf _ARGS((char *fmt, ...));
  163.  
  164. void wsetstyle _ARGS((Style face));
  165.  
  166. WINDOW *whichwin _ARGS((WindowPtr w));
  167.  
  168. void makerect _ARGS((WINDOW *win, Rect *pr,
  169.     int left, int top, int right, int bottom));
  170. void getwinrect _ARGS((WINDOW *win, Rect *pr));
  171.  
  172. void set_arrow _ARGS((void));
  173. void set_applcursor _ARGS((void));
  174. void set_watch _ARGS((void));
  175. void set_ibeam _ARGS((void));
  176. void set_hand _ARGS((void));
  177.  
  178. void makescrollbars _ARGS((WINDOW *win, /*bool*/int hor, /*bool*/int ver));
  179. void movescrollbars _ARGS((WINDOW *win));
  180. void hidescrollbars _ARGS((WINDOW *win));
  181. void showscrollbars _ARGS((WINDOW *win));
  182. void _wgrowicon _ARGS((WINDOW *win));
  183. void _wfixorigin _ARGS((WINDOW *));
  184.  
  185. void scrollby _ARGS((WINDOW *win, Rect *pr, int dh, int dv));
  186. void do_scroll _ARGS((Point *pwhere,
  187.     WINDOW *win, ControlHandle bar, int pcode));
  188. void dragscroll _ARGS((WINDOW *win, int h, int v, int constrained));
  189.  
  190. void initwattr _ARGS((void));
  191.  
  192. void inval_border _ARGS((WindowPtr w));
  193. void valid_border _ARGS((WindowPtr w));
  194.  
  195. void rmlocalmenus _ARGS((WINDOW *win));
  196. void addlocalmenus _ARGS((WINDOW *win));
  197. void initmbar _ARGS((struct menubar *mp));
  198. void killmbar _ARGS((struct menubar *mp));
  199. void setup_menus _ARGS((void));
  200.  
  201. void do_about _ARGS((void));
  202. void getargcargv _ARGS((int *pargc, char ***pargv));
  203. void fullpath _ARGS((char *buf, int wdrefnum, char *file));
  204. char *getdirname _ARGS((int wdrefnum));
  205.  
  206.  
  207. void rmcaret _ARGS((WINDOW *win));
  208. void showcaret _ARGS((WINDOW *win));
  209. void blinkcaret _ARGS((WINDOW *win));
  210. void _wresetmouse _ARGS((void));
  211.  
  212. void _wfreeclip _ARGS((void));
  213. bool checktimer _ARGS((EVENT *ep));
  214. void autoscroll _ARGS((WINDOW *active, int h, int v));
  215. void _wdo_menu _ARGS((EVENT *ep, long menu_item));
  216.  
  217. void _w_usefgcolor _ARGS((COLOR color));
  218. void _w_usebgcolor _ARGS((COLOR color));
  219.  
  220. /* SetRect is much faster this way... */
  221. #define SetRect(pr, l, t, r, b) ((pr)->left = (l), (pr)->top = (t), \
  222.                 (pr)->right = (r), (pr)->bottom = (b))
  223.